package br.com.conciliador.cadastro.vo;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Proxy;
import org.hibernate.annotations.Type;

import br.com.conciliador.cadastro.vo.filtro.FiltroLancamentosVo;
import br.com.r2.util.tipodado.Data;
import br.com.r2.util.tipodado.InteiroLongo;
import br.com.r2.util.tipodado.Moeda;
import br.com.r2.util.tipodado.Texto;

@Entity
@Table(name = "LANCAMENTOS")
@Proxy(lazy = true)
public class LancamentosVo implements Serializable
{

   /**
    * 
    */
   private static final long serialVersionUID = 4881690654660024886L;

   @Id
   @Column(name = "ID")
   @GeneratedValue(generator = "InteiroSequenceGenerator")
   @GenericGenerator(name = "InteiroSequenceGenerator", strategy = "br.com.r2.util.tipodado.hibernate.generator.InteiroSequenceGenerator")
   @Type(type = "br.com.r2.util.tipodado.hibernate.InteiroLongoUT")
   private InteiroLongo codigo;

   @Column(name = "DATA")
   @Type(type = "br.com.r2.util.tipodado.hibernate.DataUT")
   private Data data;

   @Column(name = "VALOR_LANCAMENTO")
   @Type(type = "br.com.r2.util.tipodado.hibernate.MoedaUT")
   private Moeda valorLancamento;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "DIM_DATALANCAMENTO")
   private DatasVo dataLancamentoVo;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "DIM_CHAVEFATO")
   private ChaveFatoVo chaveFatoVo;

   @Column(name = "DEBITO_CREDITO")
   @Type(type = "br.com.r2.util.tipodado.hibernate.TextoUT")
   private Texto debitoCredito;

   @Column(name = "PERIODO_REFERENCIA")
   @Type(type = "br.com.r2.util.tipodado.hibernate.TextoUT")
   private Texto periodoReferencia;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "DIM_NATUREZA")
   private NaturezaVo naturezaVo;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "DIM_ARQUIVO")
   private ArquivoVo arquivoVo;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "DIM_LOJA")
   private LojaVo lojaVo;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "DIM_BANDEIRA")
   private BandeiraVo bandeiraVo;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "DIM_CHAVELANCAMENTO")
   private ChaveLancamentosVo chaveLancamentosVo;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "DIM_DATACREDITO")
   private DatasVo dataCreditoVo;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "DIM_HISTORICO")
   private HistoricoVo historicoVo;

   @Transient
   private FiltroLancamentosVo filtro;
   
   public InteiroLongo getCodigo()
   {
      return codigo;
   }

   public void setCodigo(InteiroLongo codigo)
   {
      this.codigo = codigo;
   }

   public Data getData()
   {
      return data;
   }

   public void setData(Data data)
   {
      this.data = data;
   }

   public Moeda getValorLancamento()
   {
      return valorLancamento;
   }

   public void setValorLancamento(Moeda valorLancamento)
   {
      this.valorLancamento = valorLancamento;
   }

   public DatasVo getDataLancamentoVo()
   {
      return dataLancamentoVo;
   }

   public void setDataLancamentoVo(DatasVo dataLancamentoVo)
   {
      this.dataLancamentoVo = dataLancamentoVo;
   }

   public ChaveFatoVo getChaveFatoVo()
   {
      return chaveFatoVo;
   }

   public void setChaveFatoVo(ChaveFatoVo chaveFatoVo)
   {
      this.chaveFatoVo = chaveFatoVo;
   }

   public Texto getDebitoCredito()
   {
      return debitoCredito;
   }

   public void setDebitoCredito(Texto debitoCredito)
   {
      this.debitoCredito = debitoCredito;
   }

   public Texto getPeriodoReferencia()
   {
      return periodoReferencia;
   }

   public void setPeriodoReferencia(Texto periodoReferencia)
   {
      this.periodoReferencia = periodoReferencia;
   }

   public NaturezaVo getNaturezaVo()
   {
      return naturezaVo;
   }

   public void setNaturezaVo(NaturezaVo naturezaVo)
   {
      this.naturezaVo = naturezaVo;
   }

   public ArquivoVo getArquivoVo()
   {
      return arquivoVo;
   }

   public void setArquivoVo(ArquivoVo arquivoVo)
   {
      this.arquivoVo = arquivoVo;
   }

   public LojaVo getLojaVo()
   {
      return lojaVo;
   }

   public void setLojaVo(LojaVo lojaVo)
   {
      this.lojaVo = lojaVo;
   }

   public BandeiraVo getBandeiraVo()
   {
      return bandeiraVo;
   }

   public void setBandeiraVo(BandeiraVo bandeiraVo)
   {
      this.bandeiraVo = bandeiraVo;
   }

   public ChaveLancamentosVo getChaveLancamentosVo()
   {
      return chaveLancamentosVo;
   }

   public void setChaveLancamentosVo(ChaveLancamentosVo chaveLancamentosVo)
   {
      this.chaveLancamentosVo = chaveLancamentosVo;
   }

   public DatasVo getDataCreditoVo()
   {
      return dataCreditoVo;
   }

   public void setDataCreditoVo(DatasVo dataCreditoVo)
   {
      this.dataCreditoVo = dataCreditoVo;
   }

   public HistoricoVo getHistoricoVo()
   {
      return historicoVo;
   }

   public void setHistoricoVo(HistoricoVo historicoVo)
   {
      this.historicoVo = historicoVo;
   }

   public FiltroLancamentosVo getFiltro()
   {
      return filtro;
   }

   public void setFiltro(FiltroLancamentosVo filtro)
   {
      this.filtro = filtro;
   }

}
